/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.gov.igac.observatorio.entidades.idea;

import co.gov.igac.observatorio.entidades.propuesta.Propuesta;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 *
 * @author jgamba
 */
@Entity
@Table(name = "idea")
@NamedQueries({
    @NamedQuery(name = "Idea.findAll", query = "SELECT i FROM Idea i"),
    @NamedQuery(name = "Idea.findByIdIdea", query = "SELECT i FROM Idea i WHERE i.idIdea = :idIdea"),
    @NamedQuery(name = "Idea.findByTitulo", query = "SELECT i FROM Idea i WHERE i.titulo = :titulo"),
    @NamedQuery(name = "Idea.findByDescripcion", query = "SELECT i FROM Idea i WHERE i.descripcion = :descripcion"),
    @NamedQuery(name = "Idea.findByPalabrasClave", query = "SELECT i FROM Idea i WHERE i.palabrasClave = :palabrasClave"),
    @NamedQuery(name = "Idea.findByJustificacion", query = "SELECT i FROM Idea i WHERE i.justificacion = :justificacion"),
    @NamedQuery(name = "Idea.findByProblema", query = "SELECT i FROM Idea i WHERE i.problema = :problema"),
    @NamedQuery(name = "Idea.findByAntecedente", query = "SELECT i FROM Idea i WHERE i.antecedente = :antecedente"),
    @NamedQuery(name = "Idea.findByMetodologia", query = "SELECT i FROM Idea i WHERE i.metodologia = :metodologia"),
    @NamedQuery(name = "Idea.findByResultado", query = "SELECT i FROM Idea i WHERE i.resultado = :resultado"),
    @NamedQuery(name = "Idea.findByObjetivoGeneral", query = "SELECT i FROM Idea i WHERE i.objetivoGeneral = :objetivoGeneral"),
    @NamedQuery(name = "Idea.findByVersion", query = "SELECT i FROM Idea i WHERE i.version = :version")})
public class Idea implements Serializable {
    @Size(max = 100)
    @Column(name = "otroTipoInvestigacion")
    private String otroTipoInvestigacion;
    @OneToMany(mappedBy = "idea")
    private List<Documentacion> documentacionList;
    @JoinColumn(name = "LineaInvestigacion_idLineaInvestigacion", referencedColumnName = "idLineaInvestigacion")
    @ManyToOne
    private Lineainvestigacion lineainvestigacion;
    @JoinColumn(name = "Subarea2_idSubarea2", referencedColumnName = "idSubarea2")
    @ManyToOne
    private Subarea2 subarea2;
    @JoinColumn(name = "SubArea1_idSubArea1", referencedColumnName = "idSubArea1")
    @ManyToOne
    private Subarea1 subarea1;
    @JoinColumn(name = "SubArea_idSubArea", referencedColumnName = "idSubArea")
    @ManyToOne
    private Subarea subarea;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idea")
    private List<Propuesta> propuestaList;
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "idIdea")
    private Integer idIdea;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "titulo")
    private String titulo;
    @Size(max = 300)
    @Column(name = "descripcion")
    private String descripcion;
    @Size(max = 100)
    @Column(name = "palabrasClave")
    private String palabrasClave;
    @Size(max = 300)
    @Column(name = "justificacion")
    private String justificacion;
    @Size(max = 300)
    @Column(name = "problema")
    private String problema;
    @Size(max = 500)
    @Column(name = "antecedente")
    private String antecedente;
    @Size(max = 500)
    @Column(name = "metodologia")
    private String metodologia;
    @Size(max = 500)
    @Column(name = "resultado")
    private String resultado;
    @Size(max = 200)
    @Column(name = "objetivoGeneral")
    private String objetivoGeneral;
    @Column(name = "version")
    private Integer version;
    @JoinColumn(name = "Subdireccion_idSubdireccion", referencedColumnName = "idSubdireccion")
    @ManyToOne
    private Subdireccion subdireccion;
    @JoinColumn(name = "Entidad_idEntidad", referencedColumnName = "idEntidad")
    @ManyToOne
    private Entidad entidad;
    @JoinColumn(name = "Objetivo_idObjetivo", referencedColumnName = "idObjetivoEspecifico")
    @ManyToOne
    private Objetivoespecifico objetivoespecifico;
    @JoinColumn(name = "TipoProyecto_idTipoProyecto", referencedColumnName = "idTipoProyecto")
    @ManyToOne
    private Tipoproyecto tipoproyecto;
    @JoinColumn(name = "Investigador_idInvestigador", referencedColumnName = "idInvestigador")
    @ManyToOne
    private Investigador investigador;
    @JoinColumn(name = "AreaInvestigacion_idAreaInvestigacion", referencedColumnName = "idAreaInvestigacion")
    @ManyToOne
    private Areainvestigacion areainvestigacion;

    public Idea() {
    }

    public Idea(Integer idIdea) {
        this.idIdea = idIdea;
    }

    public Idea(Integer idIdea, String titulo) {
        this.idIdea = idIdea;
        this.titulo = titulo;
    }

    public Integer getIdIdea() {
        return idIdea;
    }

    public void setIdIdea(Integer idIdea) {
        this.idIdea = idIdea;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getPalabrasClave() {
        return palabrasClave;
    }

    public void setPalabrasClave(String palabrasClave) {
        this.palabrasClave = palabrasClave;
    }

    public String getJustificacion() {
        return justificacion;
    }

    public void setJustificacion(String justificacion) {
        this.justificacion = justificacion;
    }

    public String getProblema() {
        return problema;
    }

    public void setProblema(String problema) {
        this.problema = problema;
    }

    public String getAntecedente() {
        return antecedente;
    }

    public void setAntecedente(String antecedente) {
        this.antecedente = antecedente;
    }

    public String getMetodologia() {
        return metodologia;
    }

    public void setMetodologia(String metodologia) {
        this.metodologia = metodologia;
    }

    public String getResultado() {
        return resultado;
    }

    public void setResultado(String resultado) {
        this.resultado = resultado;
    }

    public String getObjetivoGeneral() {
        return objetivoGeneral;
    }

    public void setObjetivoGeneral(String objetivoGeneral) {
        this.objetivoGeneral = objetivoGeneral;
    }

    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }

    public Subdireccion getSubdireccion() {
        return subdireccion;
    }

    public void setSubdireccion(Subdireccion subdireccion) {
        this.subdireccion = subdireccion;
    }

    public Entidad getEntidad() {
        return entidad;
    }

    public void setEntidad(Entidad entidad) {
        this.entidad = entidad;
    }

    public Objetivoespecifico getObjetivoespecifico() {
        return objetivoespecifico;
    }

    public void setObjetivoespecifico(Objetivoespecifico objetivoespecifico) {
        this.objetivoespecifico = objetivoespecifico;
    }

    public Tipoproyecto getTipoproyecto() {
        return tipoproyecto;
    }

    public void setTipoproyecto(Tipoproyecto tipoproyecto) {
        this.tipoproyecto = tipoproyecto;
    }

    public Investigador getInvestigador() {
        return investigador;
    }

    public void setInvestigador(Investigador investigador) {
        this.investigador = investigador;
    }

    public Areainvestigacion getAreainvestigacion() {
        return areainvestigacion;
    }

    public void setAreainvestigacion(Areainvestigacion areainvestigacion) {
        this.areainvestigacion = areainvestigacion;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idIdea != null ? idIdea.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Idea)) {
            return false;
        }
        Idea other = (Idea) object;
        if ((this.idIdea == null && other.idIdea != null) || (this.idIdea != null && !this.idIdea.equals(other.idIdea))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "co.gov.igac.observatorio.entidades.idea.Idea[ idIdea=" + idIdea + " ]";
    }

    public List<Propuesta> getPropuestaList() {
        return propuestaList;
    }

    public void setPropuestaList(List<Propuesta> propuestaList) {
        this.propuestaList = propuestaList;
    }

    public Lineainvestigacion getLineainvestigacion() {
        return lineainvestigacion;
    }

    public void setLineainvestigacion(Lineainvestigacion lineainvestigacion) {
        this.lineainvestigacion = lineainvestigacion;
    }

    public Subarea2 getSubarea2() {
        return subarea2;
    }

    public void setSubarea2(Subarea2 subarea2) {
        this.subarea2 = subarea2;
    }

    public Subarea1 getSubarea1() {
        return subarea1;
    }

    public void setSubarea1(Subarea1 subarea1) {
        this.subarea1 = subarea1;
    }

    public Subarea getSubarea() {
        return subarea;
    }

    public void setSubarea(Subarea subarea) {
        this.subarea = subarea;
    }

    public String getOtroTipoInvestigacion() {
        return otroTipoInvestigacion;
    }

    public void setOtroTipoInvestigacion(String otroTipoInvestigacion) {
        this.otroTipoInvestigacion = otroTipoInvestigacion;
    }

    public List<Documentacion> getDocumentacionList() {
        return documentacionList;
    }

    public void setDocumentacionList(List<Documentacion> documentacionList) {
        this.documentacionList = documentacionList;
    }
    
}
